/**
 * 
 */
package com.bbva.gptf.back.util;

import java.math.BigDecimal;
import java.util.Comparator;
import java.util.regex.Pattern;

import com.bbva.gptf.dto.bean.Posicion;

/**
 * @author jrojasbe
 * 
 */
public class OrdenarVistaPosicion implements Comparator<Posicion> {

	private BigDecimal aNumero(final String val) {
		try {
			return new BigDecimal(val);
		} catch (final Exception e) {
		}
		return BigDecimal.ZERO;
	}

	@Override
	public int compare(final Posicion pos1, final Posicion pos2) {
		if (pos1.getCdEmisora().compareToIgnoreCase(pos2.getCdEmisora()) != 0) {
			return pos1.getCdEmisora().compareToIgnoreCase(pos2.getCdEmisora());
		} else if (pos1.getCdSerie().compareTo(pos2.getCdSerie()) != 0) {
			return pos1.getCdSerie().compareTo(pos2.getCdSerie());
		} else if (pos1.getCdValorBmv().compareTo(pos2.getCdValorBmv()) != 0) {
			return pos1.getCdValorBmv().compareTo(pos2.getCdValorBmv());
		} else if (pos1.getCdContrato().compareTo(pos2.getCdContrato()) != 0) {
			return pos1.getCdContrato().compareTo(pos2.getCdContrato());
		} else if (pos1.getNuNivel().compareTo(pos2.getNuNivel()) != 0) {
			return pos1.getNuNivel().compareTo(pos2.getNuNivel());
		} else {
			if (Pattern.matches(".*\\(.*\\-.*\\)", pos1.getIntegracion())
					&& Pattern.matches(".*\\(.*\\-.*\\)", pos2.getIntegracion())) {
				String aux1 = pos1.getIntegracion().contains("->") ? pos1
						.getIntegracion().concat("00") : pos1.getIntegracion();
				String aux2 = pos2.getIntegracion().contains("->") ? pos2
						.getIntegracion().concat("00") : pos2.getIntegracion();
						aux1=aux1.substring(aux1.indexOf("("));
						aux2=aux2.substring(aux2.indexOf("("));
				final String[] x = aux1.replaceAll("\\(", "").split("-");
				final String[] y = aux2.replaceAll("\\(", "").split("-");
				final String plazo1 = x[0];
				final String plazo2 = y[0];
				return aNumero(plazo1).compareTo(aNumero(plazo2));
			} else {
				return pos1.getIntegracion().compareToIgnoreCase(
						pos2.getIntegracion());
			}
		}
	}

}
